﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace KaartenLib
{
    class SpelBeurt
    {
        private Kaart spelerKaart;
        private Kaart computerKaart;
        private KansSpel kansSpel;// = new KansSpel();
        private KaartSoort troefkaart;

        public SpelBeurt(KansSpel spel)
        {
            this.kansSpel = spel;
        }

        public bool isGedaan()
        {
            if (this.spelerKaart != null && this.computerKaart != null)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public void setSpelerKaart(Kaart kaart)
        {
            if (kansSpel.isSpelerAanBeurt() && this.spelerKaart == null)
            {
                this.spelerKaart = kaart;
            }
            else
            {
                //speler is niet aan beurt
            }
        }

        public void setComputerKaart(Kaart kaart)
        {
            if (!kansSpel.isSpelerAanBeurt() && computerKaart == null)
            {
                this.computerKaart = kaart;
            }
            else
            {
                //computer is niet aan beurt
            }
        }

        /// <summary>
        /// Als een beurt is afgelopen, geeft deze methode de uitgedeelde punten terug. 
        /// </summary>
        /// <remarks>Afhankelijk of het aantal punten positief of negatief is kan ook gebruikt worden om het aantal verdiende kaarten te berekenen.</remarks>
        /// <returns>Een positief getal zijn punten gewonnen door de speler, negatief is voor de computer.</returns>
        public int getPunten()
        {
            if (this.spelerKaart == null || this.computerKaart == null)
            {
                //iedereen heeft deze beurt nog niet gespeeld?
                //excpetion?
                return 0;
            }

            int puntenFactor = 0;

            //heeft de speler een troefkaart?
            if (this.spelerKaart.Soort.Equals(this.kansSpel.getTroef()))
            {
                //heeft de computer ook een troefkaart?
                if (this.computerKaart.Soort.Equals(this.kansSpel.getTroef()))
                {
                    if (spelerKaart.Waarde > computerKaart.Waarde)
                    {
                        //speler wint met hoogste troef
                        puntenFactor = 2;
                    }
                    else
                    {
                        //computer wint met hoogste troef
                        puntenFactor = -2;
                    }
                }
                else
                {
                    //speler wint met enige troef
                    puntenFactor = 2;
                }

            }
            else if (this.computerKaart.Soort.Equals(this.kansSpel.getTroef()))
            {
                //computer wint met enige troef
                puntenFactor = -2;
            }
            else
            {

                if (spelerKaart.Waarde > computerKaart.Waarde)
                {
                    puntenFactor = 1;
                }
                else
                {
                    puntenFactor = -1;
                }
            }

            return ((int)spelerKaart.Waarde + (int)computerKaart.Waarde) * puntenFactor;
        }
    }
}
